var log_dt = new Date().getTime();

// 设置日志对象类的通用属性
function getCommonProperty() {
    return {
        appKey: '应用标识',
        page_guid: log_dt,//想识别某次日志,刷新页面就会生成一新的
        happenTime: new Date().getTime(), // 日志发生时间
        simpleUrl: window.location.href.split('?')[0].replace('#', ''),// 页面的url
        customerKey: '王孟贵', //utils.getCustomerKey(); // 用于区分用户，所对应唯一的标识，清理本地数据后失效
        domain: window.document.domain
    }
}

// JS错误日志，继承于日志基类MonitorBaseInfo
function JavaScriptErrorInfo() {

    this.handleLogInfo = function (logMsg) {
        delete this.handleLogInfo;


        var data = {
            ...getCommonProperty(),
            uploadType: 'JS_ERR',
            logMsg: logMsg
        }


        //nginx日志
        var img= new Image();
        img.src = "http://log.besteasylearn.com/log.gif?appKey=123&json=" + JSON.stringify(data)
    
        var res = $.post({
            url: "/log/up",
            data: data,
            async: false
        });
    }
}

/**
   * 页面JS错误监控
   */
var jsMonitorStarted = false;
function recordJavaScriptError() {
    // 重写console.error, 可以捕获更全面的报错信息
    var oldError = console.error;
    console.error = function () {
        // arguments的长度为2时，才是error上报的时机
        // if (arguments.length < 2) return;
        var errorMsg = arguments[0] && arguments[0].message;
        var url = window.location.href;
        var lineNumber = 0;
        var columnNumber = 0;
        var errorObj = arguments[0] && arguments[0].stack;
        if (!errorObj) errorObj = arguments[0];
        // 如果onerror重写成功，就无需在这里进行上报了
        !jsMonitorStarted && siftAndMakeUpMessage(errorMsg, url, lineNumber, columnNumber, errorObj);
        return oldError.apply(console, arguments);
    };
    // 重写 onerror 进行jsError的监听
    window.onerror = function (errorMsg, url, lineNumber, columnNumber, errorObj) {
        jsMonitorStarted = true;
        var errorStack = errorObj ? errorObj.stack : null;
        siftAndMakeUpMessage(errorMsg, url, lineNumber, columnNumber, errorStack);
    };

    function siftAndMakeUpMessage(origin_errorMsg, origin_url, origin_lineNumber, origin_columnNumber, origin_errorObj) {
        var errorMsg = origin_errorMsg ? origin_errorMsg : '';
        var errorObj = origin_errorObj ? origin_errorObj : '';
        var errorType = "";
        if (errorMsg) {
            var errorStackStr = JSON.stringify(errorObj)
            errorType = errorStackStr.split(": ")[0].replace('"', "");
        }
        var javaScriptErrorInfo = new JavaScriptErrorInfo();
        javaScriptErrorInfo.handleLogInfo({
            errorType: errorType,
            errorMessage: errorMsg, //encodeURIComponent(errorMsg),
            errorStack: errorObj,
            origin_url,
            origin_lineNumber,
            origin_columnNumber
        });
    };
};

recordJavaScriptError()
